// import com.alibaba.druid.sql.SQLUtils;
// import com.alibaba.druid.sql.ast.SQLExpr;
// import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr;
// import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
// import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
// import com.alibaba.druid.sql.ast.statement.SQLTableSource;
// import com.alibaba.druid.sql.dialect.oracle.visitor.OracleASTVisitor;
// import com.alibaba.druid.sql.visitor.SQLASTVisitor;
#pragma once
#include "../../../../ast/statement/SQLJoinTableSource.h"
#include "OracleSelectTableSource.h"

class OracleSelectJoin : virtual public SQLJoinTableSource, virtual public OracleSelectTableSource
{
public:
  OracleSelectJoin(string_ptr alias);

  OracleSelectJoin();

  OracleSelectJoin(SQLTableSource_ptr left, SQLJoinTableSource_JoinType_ptr joinType, SQLTableSource_ptr right, SQLExpr_ptr condition);
  SHAREDOBJECT(OracleSelectJoin);
  // @Override
  void accept0(SQLASTVisitor_ptr visitor);

  void accept0(OracleASTVisitor_ptr visitor);

  // @Override
  bool equals(Object_ptr o);

  // @Override
  int hashCode();

  string_ptr toString();

  SQLObject_ptr clone();

  void setLeft(string_ptr tableName);

  void setRight(string_ptr tableName);

  SQLJoinTableSource_ptr join(SQLTableSource_ptr right, SQLJoinTableSource_JoinType_ptr joinType, SQLExpr_ptr condition);
};
